A important development in computer processing has been multiprocessor systems, which use more than one processor, each capable of independent action, to execute an applications program. Different program tasks may be assigned to different processors, with each processor optimized to perform its assigned task, with the result that program execution time is substantially reduced. Some multiprocessor systems have processors that are dissimilar as well as separate, each having its own instruction set. Even the idea of separate processors is evolving; a developing innovation is the fabrication of dissimilar processors in the same integrated circuit.
Regardless of whether the processors are similar or dissimilar or are separately fabricated, every multiprocessor system requires a means for communication between the processors. This can be accomplished by a shared communications memory, or when there is no shared memory, by various argument passing means, such as ethernet, a bus connection, or some other communications link, or by a combination of these techniques.
In addition to the above hardware characteristics, multiprocessor systems vary with respect to the manner in which they use software. In some systems, separate processors execute different programs, and there is no need to partition the software. In contrast, when separate processors are to execute different tasks of one integrated application, software tasks must be partitioned among processors.
Some multiprocessor systems use separate programming for each processor. For example, some systems use a host processor and a slave processor, with the slave processor having a fixed set of routines. Software interfacing permits applications software running on the host to access the slave for the designated routines. A limitation of this type of system is that separate programming is required for each. Another limitation is that an applications programmer cannot change the functionality of the programming of the slave processor.
When a programmer attempts to write a single program for use by more than one processor in a multiprocessor system, the implementation is often tedious. For example, some systems permit a slave processor to be programmed in the same language as the host processor, but these systems require substantial changes to the programming code to be transferred from execution by the host to execution by the slave.
Thus, a need exists for a partitioning method, which permits a single program to be written for use by more than one processor. The method should allow the program to be partitioned among the processors with a minimum of extra programming effort.